iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
DevOps

將 AI Code Review 整進 CICD系列 第 9

將 AI Code Review 整進 CICD Day9

  • 分享至 

  • xImage
  •  

今天來 trace code 看看,順便感受人家開發人員的 code 之美

入口點我們來看

python3 -m pr_agent.cli --pr_url $URL review

我們找到了在 pr_agent folder 下的 cli.py,然後在裡面找到了

  1. 直接運行python 檔案時,會運行 run function。定義變數command 被設置為 "review"
if __name__ == '__main__':
    run()

def run(inargs=None, args=None):
    parser = set_parser()
    if not args:
        args = parser.parse_args(inargs)
    if not args.pr_url and not args.issue_url:
        parser.print_help()
        return

    command = args.command.lower()
    get_settings().set("CONFIG.CLI_MODE", True)
    if args.issue_url:
        result = asyncio.run(PRAgent().handle_request(args.issue_url, [command] + args.rest))
    else:
        result = asyncio.run(PRAgent().handle_request(args.pr_url, [command] + args.rest))
    if not result:
        parser.print_help()

run 裡面 async 調用 PRAgent().handle_request()。以下查看 PRAgent().handle_request(),

request 帶入 review

得到 apply_repo_settings(pr_url)

  1. get_git_provider_with_context -> 確認為 gitlab provide

  2. 從 provider 帶出 context,並拿到相關設置

git_provider = get_git_provider_with_context(pr_url) ->  確認為 gitlab provider

git_provider = _GIT_PROVIDERS[provider_id](pr_url)
if is_context_env:
    context["git_provider"] = {pr_url: git_provider}

檢查 request(review) 是否在command2class 字典內,並發現 "review" 命令對應的是 PRReviewer

command2class = {
    "auto_review": PRReviewer,
    "answer": PRReviewer,
    "review": PRReviewer,
  }

接著執行 command2class,創建 PRReviewer 的實例並調用其 run() 方法

await command2class[action](pr_url, ai_handler=self.ai_handler, args=args).run()

上一篇
將 AI Code Review 整進 CICD Day8
下一篇
將 AI Code Review 整進 CICD Day10
系列文
將 AI Code Review 整進 CICD24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言